package week_1;

public class day04_week01 {
    public static void main(String[] args) {
        int[] nums={0,0,0,1,1,1,1,1,1,0};
        System.out.println(findMaxLength(nums));
    }
    /*
    1.确定前缀和组,同时却定可能最长值
    2.逐渐缩减两坐标距离,遍历数组直到前缀组坐标相减后组内参数相等返回
     */
    public static int findMaxLength(int[] nums) {
        int max;
        //创建前缀和组
        int[][] NUMs=new int[nums.length+1][2];
        NUMs[0][0]=0;NUMs[0][1]=0;
        for (int i=0;i<nums.length;i++){
            if(nums[i]==0){
                NUMs[i+1][0]=NUMs[i][0]+1;
                NUMs[i+1][1]=NUMs[i][1];
            }else {
                NUMs[i+1][0]=NUMs[i][0];
                NUMs[i+1][1]=NUMs[i][1]+1;
            }
        }
        //得到可能最长值
        max=NUMs[nums.length][0]>=NUMs[nums.length][1]?NUMs[nums.length][1]*2:NUMs[nums.length][0]*2;
        //反复遍历
        for(;max>=2;max-=2){
            for (int i=0;i+max<NUMs.length;i++){
                if (NUMs[i+max][0]-NUMs[i][0]==NUMs[i+max][1]-NUMs[i][1])return max;
            }
        }
        return 0;
    }
}
